#include <iostream>

//== > >=
//两个对象需要比较时，需要重载运算符
//重载运算符本质上是一个函数
//返回类型和参数列表
//有些运算符系统自动会提供

class Time{
public:
    Time(){
        std::cout<<"无参构造"<<std::endl;
    }

    //这种的带一个参数的构造函数，一般要加上explicit,如果不加的话，有可能会发生隐式类型转换，他会将一个数字隐式转化成一个对象
    //因此要注意这样的带一个参数的构造函数
    //拷贝构造不要加
    explicit Time(int val){


    }

    //拷贝构造一般不用用explicit，expicit是为了防止隐式转换
    Time(const Time&t){
        this->year=t.year;
        this->month=t.month;
        this->day=t.day;
        std::cout<<"拷贝构造"<<std::endl;
    }
    //赋值运算符
    //重载赋值运算符：有返回类型和参数列表，这里的参数表示运算符的运算对对象
    Time& operator=(const Time&t){//重载的赋值运算符

        std::cout<<"赋值运算符重载"<<std::endl;
         this->year=t.year;
        this->month=t.month;
        this->day=t.day;

        return*this;
    }



private:
    int year;
    int month;
    int day;

};



int main(){
    Time t;
    //下面这两个因为定义的时候直接赋值，因此这是利用拷贝构造初始化
    Time t2=t;
    Time t3={t};


    //下面这种方式，定义的时候，并没有直接赋值，先定义，再在后百年赋值
    Time t4;
    t4=t;  //这就是拷贝赋值运算符的使用,如果未定义，编译器会自动生成



}



